/**
 *  泛型可以省去创建所有这些接口的麻烦。你可以创建一个带有类型参数的接口。
 *  示例如下：T是一个占位符，您可以将其视为开发人员稍后定义的类型。 
 */

// https://www.jianshu.com/p/a4a9c89b85ca
abstract class Cache<T> {
  T getByKey(String key);
}


//***************  使用泛型方法  ****************//

T first<T>(List<T> data) {
      // 做一些初始工作或错误检查...
      T tmp = data[0];
  // 做一些额外的检查或处理...
  return tmp;
}

// 泛型方法可以声明类方法（实例和静态）以相同的方式获取泛型参数。
class  C {
   static  int f < S,T > (int x) => 3 ;
  int m < S,T > (int x) => 3 ;
}



main() {
  var names = List<String>();
  names.addAll(['Seth', 'Kathy', 'Lars']);
  var numbers = <String>['11', '22', '33'];
  var pages = <String, String>{
    'index.html': 'Homepage',
    'store.html': 'Store',
    'mine.html': 'Mine'
  };
}
